﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Controls;
using System.Configuration;
using System.Windows.Data;
using System.Data;
using System.Text.RegularExpressions;
using System.Windows.Documents;
using System.Windows.Input;
using System.IO;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace MyVideoTek
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
        #region Attributs
        GestionDossierFichier DossierSource = new GestionDossierFichier();
        SqlDataAbstract lesDatas;
        string cheminFilm;
        #endregion

		public MainWindow()
		{
			this.InitializeComponent();

            //Propiété d'affichage
            // this.Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height - 40;
            // this.Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;

            //Chargement des DATA sources s'il y en a
            //GetDataSourceConfig();

            //Charge toute les données
            LoadData();
		}

        #region Recpuère le fichier de configuration
        private void GetDataSourceConfig()
        {
            /*
            string nom = ConfigurationManager.AppSettings["nom"];

            if (nom == null)
            {
                //Aucun path, premier lancement de l'application
                //      SelectionnerFolderPath ajouterDesDossiers = new SelectionnerFolderPath();
                //      ajouterDesDossiers.ShowDialog();
            }
            else
            {
                /*
                //Path présent
                foreach (string aValue in ConfigurationManager.AppSettings)
                {
                    MessageBox.Show(ConfigurationManager.AppSettings[aValue]);
                }
                 
            }
        */
        }
        #endregion

        #region Charge les données de l'application
        private void LoadData()
        {
            //Initialisation
            MainListCategories.Items.Clear();
            MainListFilm.Items.Clear();

            //Charge les titre des films
            AfficheFilm();

            //Charge les genres
            AfficheFilmGenre();
        }
        #endregion

        private void AfficheFilm()
        {
            lesDatas = new SqlDataAbstract();

            //Connection à la base de donnée
            SqliteData db = new SqliteData();
            DataTable resultTable = lesDatas.GetListFilms();

            //Parcours des resultats ( qu'une seule ligne )
            foreach (DataRow row in resultTable.Rows)
            {
                ItemMovie item = new ItemMovie(row["titre_film"].ToString());

                string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location).ToString() + "\\images\\" + row["affiche_film"].ToString();

                //Si une image est dispo
                if (row["affiche_film"].ToString() != "" && File.Exists(path))
                {
                   BitmapImage bi3 = new BitmapImage();
                   bi3.BeginInit();
                   bi3.UriSource = new Uri(path, UriKind.Absolute);
                   bi3.EndInit();

                    //Ajoute l'items
                   item.PosterMovie.Source = bi3;
                }
                else
                {
                    path = "\\images\\forbidden.png";

                    BitmapImage bi3 = new BitmapImage();
                    bi3.BeginInit();
                    bi3.UriSource = new Uri(path, UriKind.Relative);
                    bi3.EndInit();

                    item.PosterMovie.Source = bi3;
                }

                MainListFilm.Items.Add(item);
            }
        }


        private void AfficheFilmGenre()
        {
            //Connection à la base de donnée
            SqliteData db = new SqliteData();
            lesDatas = new SqlDataAbstract();
            DataTable resultTable = lesDatas.GetListGenre();

            //Parcours des genres est insertion dans la liste box
            foreach (DataRow row in resultTable.Rows)
            {
                MainListCategories.Items.Add(row["Genre"].ToString());
            }
        }

        private void MainListCategories_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Changement de panel
            if (MainTab.SelectedItem != (TabItem)MainTab.FindName("TabListFilm"))
            {
                MainTab.SelectedItem = (TabItem)MainTab.FindName("TabListFilm");
            }

            
            if(MainListCategories.Items.Count != 0)
            {
                MainListFilm.Items.Clear();
                //On a selectionné une catégorie
                string nomGenre = MainListCategories.SelectedItem.ToString();
                DataTable resultTable = lesDatas.GetFilmByNomGenre(nomGenre);

                //Parcours des resultats ( qu'une seule ligne )
                foreach (DataRow row in resultTable.Rows)
                {
                    //Nouvel ItemMovie
                    ItemMovie item = new ItemMovie(row["titre_film"].ToString());

                    string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location).ToString() + "\\images\\" + row["affiche_film"].ToString();

                    if (row["affiche_film"].ToString() != "" && File.Exists(path))
                    {
                        BitmapImage uneImage = new BitmapImage(new Uri(path, UriKind.Absolute));
                        item.PosterMovie.Source = uneImage;
                    }
                    else
                    {
                        path = "\\images\\forbidden.png";

                        BitmapImage bi3 = new BitmapImage();
                        bi3.BeginInit();
                        bi3.UriSource = new Uri(path, UriKind.Relative);
                        bi3.EndInit();

                        ImagePresentation.Source = bi3;
                    }

                    //Affichage
                    MainListFilm.Items.Add(item);
                }
            }
        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            //Changement de panel
            if (MainTab.SelectedItem != (TabItem)MainTab.FindName("TabListFilm"))
            {
                MainTab.SelectedItem = (TabItem)MainTab.FindName("TabListFilm");
            }
            
            MainListFilm.Items.Clear();
            //Recherche d'un film
            DataTable resultTable = lesDatas.GetFilmSearch(Regex.Replace(MainTextBoxSearchMovie.Text, "(')", "''"));

            //Parcours des resultats ( qu'une seule ligne )
            foreach (DataRow row in resultTable.Rows)
            {
                //Nouvel ItemMovie
                ItemMovie item = new ItemMovie(row["titre_film"].ToString());

                string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location).ToString() + "\\images\\" + row["affiche_film"].ToString();

                if (row["affiche_film"].ToString() != "" && File.Exists(path))
                {

                    BitmapImage uneImage = new BitmapImage(new Uri(path, UriKind.Absolute));
                    item.PosterMovie.Source = uneImage;
                }
                else
                {
                    path = "\\images\\forbidden.png";

                    BitmapImage bi3 = new BitmapImage();
                    bi3.BeginInit();
                    bi3.UriSource = new Uri(path, UriKind.Relative);
                    bi3.EndInit();

                    ImagePresentation.Source = bi3;
                }
                //Affichage
                MainListFilm.Items.Add(item);
            }
        }

        private void btnQuitter(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnViderBDD(object sender, RoutedEventArgs e)
        {
            MainListFilm.Items.Clear();
            MainListCategories.Items.Clear();

            //Vide toute la BDD
            SqliteData laBdd = new SqliteData();
            laBdd.VideDataBase();

            //Charge les données
            LoadData();
        }

        private void btnAjouterDossier(object sender, RoutedEventArgs e)
        {
            //Ouvezrture de la fenêtre d'ajout de dossier de films
            SelectionnerFolderPath ajouterDesDossiers = new SelectionnerFolderPath();
            //Abonnement à l'evenement "close" de la fenetre
            ajouterDesDossiers.FormClosed += new System.Windows.Forms.FormClosedEventHandler(FrmListClosed);
            ajouterDesDossiers.ShowDialog();
        }
        private void FrmListClosed(object sender, FormClosedEventArgs e)
        {
            this.LoadData();
        }

        private void MainListFilm_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            LabelPresentationTitre.Content = null;
            ImagePresentation.Source = null;

            if (MainListFilm.Items.Count > 0)
            {
                //Déclaration de variables
                ItemMovie item = (ItemMovie)MainListFilm.SelectedItem;

                //Un Film
                Film unFilm = new Film(item.TitreMovie.Content.ToString());

                //Titre du film
                LabelPresentationTitre.Content = unFilm.TitreFilm;

                string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location).ToString() + "\\images\\" + unFilm.AfficheFilm.ToString();

                if (unFilm.AfficheFilm.ToString() != "" && File.Exists(path))
                {
                    BitmapImage bi3 = new BitmapImage();
                    bi3.BeginInit();
                    bi3.UriSource = new Uri(path, UriKind.Absolute);
                    bi3.EndInit();

                    ImagePresentation.Source = bi3;
                }


                if (unFilm.Description != null)
                {
                    // Create a FlowDocument to contain content for the RichTextBox.
                    FlowDocument myFlowDoc = new FlowDocument();

                    // Add paragraphs to the FlowDocument.
                    myFlowDoc.Blocks.Add(new Paragraph(new Run(Regex.Replace(unFilm.Description, "(<br/>|<br />)", "\r\n").Replace("&quot;", "\"").Replace("[a-zA-Z](<i>)[a-zA-Z]", null))));

                    // Add initial content to the RichTextBox.
                    SysnopsisPresentation.Document = myFlowDoc;
                }

               // MainTab.SelectedIndex = "TabPresentation";
                MainTab.SelectedItem = (TabItem)MainTab.FindName("TabPresentation");
            }
        }

        private void BTNPlayMovie_Click(object sender, RoutedEventArgs e)
        {
            string titreFilm = LabelPresentationTitre.Content.ToString();

            Film unFilm = new Film(titreFilm);
            Fichier unFichier = new Fichier(null, null, unFilm.IdFilm);

            try
            {
                System.Diagnostics.Process.Start(unFichier.Path);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("Le film n'a pas été trouvé.", "Erreur lors de la recherche du film.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
	}
}